package util

import (
	"crypto/md5"
	"encoding/hex"
	"fmt"
	"os"
	"reflect"
	"strings"
)

// Md5 加密
func Md5(str []byte) string {
	h := md5.New()
	h.Write(str)
	return hex.EncodeToString(h.Sum(nil))
}

// 文件目录是否存在
func PathExist(path string) bool {
	_, err := os.Stat(path)
	if err == nil {
		return true
	}
	if os.IsNotExist(err) {
		return false
	}
	return false
}

//@description: 利用反射将结构体转化为map
func StructToMap(obj interface{})map[string]interface{}{
	v := reflect.ValueOf(obj)
	t := reflect.TypeOf(obj)
	data := make(map[string]interface{})
	for i := 0 ; i< t.NumField();i ++ {
		data[t.Field(i).Name] = v.Field(i).Interface()
	}
	return data
}

//@description: 将数组格式化为字符串
func ArrayToString(array []interface{})string{
	return strings.Replace(strings.Trim(fmt.Sprint(array), "[]"), " ", ",", -1)
}

//@description: 检查Md5
func CheckMd5(content []byte, chunkMd5 string) (CanUpload bool) {
	fileMd5 := Md5(content)
	if fileMd5 == chunkMd5 {
		return true // "可以继续上传"
	} else {
		return false // "切片不完整，废弃"
	}
}